package com.atguigu.gmall.product.service;

import com.atguigu.gmall.model.product.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author Administrator
 * @create 2020-05-14 9:26
 */

public interface ManageService {
    List<BaseCategory1> getCategory1();

    List<BaseCategory2> getCategory2(long category1Id);

    List<BaseCategory3> getCategory3(long category2Id);

    List<BaseAttrInfo> attrInfoList(Long category1Id, Long category2Id, Long category3Id);

    void saveAttrInfo(BaseAttrInfo baseAttrInfo);

    IPage<SpuInfo> spuPage(Integer page, Integer limit, Long category3Id);

    List<BaseTrademark> getTrademarkList();

    List<BaseSaleAttr> baseSaleAttrList();

    void saveSpuInfo(SpuInfo spuInfo);

    List<SpuImage> spuImageList(Long spuId);

    List<SpuSaleAttr> spuSaleAttrList(Long spuId);

    void saveSpuInfo(SkuInfo skuInfo);

    IPage<SkuInfo> getSkuList(Integer page, Integer limit);

    void onSale(Long skuId);

    void cancelSale(Long skuId);

    //***************************************AOP编程***********************************************
    //根据skuId查询
    SkuInfo getSkuInfoAop(Long skuId);

    //***************************************AOP编程***********************************************
    //根据三级分类ID查询一二三级分类
    BaseCategoryView getCategoryViewAop(Long category3Id);

    //根据spuId 查询map 集合属性
    Map getSkuValueIdsMapAop(Long spuId);

    //redis分布式锁的实现
    SkuInfo getSkuInfoRedisson(Long skuId);

    //根据三级分类ID查询一二三级分类
    BaseCategoryView getCategoryViewRedisson(Long category3Id);

    //根据spuId，skuId 查询销售属性集合
    List<SpuSaleAttr> getSpuSaleAttrListCheckBySkuRedisson(Long skuId, Long spuId);

    //根据spuId 查询map 集合属性
    Map getSkuValueIdsMapRedisson(Long spuId);

    //远程调用
    SkuInfo getSkuInfo(Long skuId);

    //根据三级分类ID查询一二三级分类
    BaseCategoryView getCategoryView(Long category3Id);

    BigDecimal getSkuPrice(Long skuId);

    List<SpuSaleAttr> getSpuSaleAttrListCheckBySku(Long skuId, Long spuId);

    Map getSkuValueIdsMap(Long spuId);

    IPage<BaseTrademark> baseTrademark(Integer page, Integer limit);

    List<BaseAttrValue> getAttrValueList(Long categoryId);

    //查询一二三级分类
    List<Map> getBaseCategoryMap();

    BaseTrademark getBaseTrademark(Long tmId);

    List<SkuAttrValue> getAttrList(Long skuId);
}
